package com.nondo.rdp.auth.service;


import com.nondo.rdp.auth.domain.Role;
import com.nondo.rdp.auth.domain.User;
import com.nondo.rdp.auth.endpoint.model.Page;

import java.util.Optional;

/**
 * UserService
 *
 * @author linfeng
 * @since 2017/7/30
 */
public interface UserService {

    /**
     * 分页查询用户信息
     *
     * @param page 分页对象
     * @param user 查询用户信息
     * @return 分页信息
     */
    Page<User> findAll(Page<User> page, User user);

    /**
     * 根据用户名查询出用户数据
     *
     * @param username 用户名
     * @return 用户数据
     */
    Optional<User> getByUsername(String username);

    /**
     * 根据手机号查出用户数据
     *
     * @param phone
     * @return
     */
    Optional<User> findByPhone(String phone);

    /**
     * 根据主键ID修改登录信息
     *
     * @param ip 登录用户的IP
     * @param id 主键
     */
    void updateUserLoginInfo(String ip, Long id);

    /**
     * 根据主键修改用户的密码
     *
     * @param id          主键
     * @param newPassword 新密码
     */
    void updatePasswordById(Long id, String newPassword);

    /**
     * 保存用户信息
     *
     * @param user 用户信息
     */
    void save(User user);

    /**
     * 根据主键删除用户信息
     *
     * @param id 用户ID
     */
    void delete(Long id);

    /**
     * 根据用户主键查询用户
     *
     * @param id 用户主键
     * @return 用户信息
     */
    User findOne(Long id);


    /**
     * 通过邀请ID查询注册数量
     *
     * @param inviterId
     * @return
     */
    int countByInviterId(long inviterId);
}
